package com.example.sbbsec.domain.pay.entity;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;

/**
 * <p> 微信支付服务器端请求实体
 *
 * @author lowe.yang on 2018-08-30
 */
@Data
@XStreamAlias("xml")
public final class WxPayRequest {

    /**
     * 必填
     * 小程序id
     * 微信分配的小程序ID
     */
    @XStreamAlias("appid")
    private String appId;

    /**
     * 必填
     * 商户id
     * 微信支付分配的商户号
     */
    @XStreamAlias("mch_id")
    private String mchId;

    /**
     * 非必填
     * 设备号
     * 自定义参数，可以为终端设备号(门店号或收银设备ID)，PC网页或公众号内支付可以传"WEB"
     */
    @XStreamAlias("device_info")
    private String deviceInfo;

    /**
     * 必填
     * 随机字符串，长度要求在32位以内。
     */
    @XStreamAlias("nonce_str")
    private String nonceStr;

    /**
     * 必填
     * 通过签名算法计算得出的签名值
     */
    private String sign;

    /**
     * 非必填
     * 签名类型，默认为MD5，支持HMAC-SHA256和MD5。
     */
    @XStreamAlias("sign_type")
    private String signType;

    /**
     * 必填
     * 商品简单描述
     */
    private String body;

    /**
     * 非必填
     * 商品详细描述，对于使用单品优惠的商户，改字段必须按照规范上传
     */
    private String detail;

    /**
     * 非必填
     * 附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用。
     */
    private String attach;

    /**
     * 必填
     * 商户系统内部订单号，要求32个字符内，只能是数字、大小写字母_-|*且在同一个商户号下唯一。
     */
    @XStreamAlias("out_trade_no")
    private String outTradeNo;

    /**
     * 非必填
     * 符合ISO 4217标准的三位字母代码，默认人民币：CNY
     */
    @XStreamAlias("fee_type")
    private String feeType;

    /**
     * 必填
     * 订单总金额，单位为分
     */
    @XStreamAlias("total_fee")
    private Integer totalFee;

    /**
     * 必填
     * 终端IP
     * APP和网页支付提交用户端ip，Native支付填调用微信支付API的机器IP。
     */
    @XStreamAlias("spbill_create_ip")
    private String spBillCreateIp;


    /**
     * 非必填
     * 交易起始时间
     * 订单生成时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010。
     */
    @XStreamAlias("time_start")
    private String timeStart;

    /**
     * 非必填
     * 交易结束时间
     * 订单失效时间，格式为yyyyMMddHHmmss，如2009年12月27日9点10分10秒表示为20091227091010。
     * 订单失效时间是针对订单号而言的，由于在请求支付的时候有一个必传参数prepay_id只有两小时的有效期，
     * 所以在重入时间超过2小时的时候需要重新请求下单接口获取新的prepay_id。
     */
    @XStreamAlias("time_expire")
    private String timeExpire;

    /**
     * 非必填
     * 订单优惠标记，使用代金券或立减优惠功能时需要的参数。
     */
    @XStreamAlias("goods_tag")
    private String goodsTag;

    /**
     * 必填
     * 异步接收微信支付结果通知的回调地址，通知url必须为外网可访问的url，不能携带参数。
     */
    @XStreamAlias("notify_url")
    private String notifyUrl;

    /**
     * 必填
     * 交易类型
     * 小程序取值如下：JSAPI
     */
    @XStreamAlias("trade_type")
    private String tradeType;

    /**
     * 非必填
     * 商品ID
     * 小trade_type=NATIVE时（即扫码支付），此参数必传。此参数为二维码中包含的商品ID，商户自行定义。
     */
    @XStreamAlias("product_id")
    private String productId;

    /**
     * 非必填
     * 指定支付方式
     * 上传此参数no_credit--可限制用户不能使用信用卡支付
     */
    @XStreamAlias("limit_pay")
    private String limitPay;

    /**
     * 非必填
     * trade_type=JSAPI，此参数必传，用户在商户appid下的唯一标识。
     */
    @XStreamAlias("openid")
    private String openId;
}
